import java.util.IllegalFormatException;
import java.util.InputMismatchException;
import java.util.Scanner;

class Stack {
    private int[] stack;
    private int top;     // индекс верхнего элемента стека
    private static final int DEFAULT_SIZE = 10;

    // Конструктор по умолчанию
    public Stack() {
        stack = new int[DEFAULT_SIZE];
        top = -1; // Стек пуст
    }

    // Конструктор с заданным размером
    public Stack(int size) {
        stack = new int[size];
        top = -1; // Стек пуст
    }

    // Метод для проверки состояния стека
    public boolean isEmpty() {
        return top == -1;
    }

    // Метод для получения верхнего элемента без удаления
    public int peek() {
        if (isEmpty()) {
            throw new IllegalStateException("Стек пуст");
        }
        return stack[top];
    }

    // Метод для извлечения верхнего элемента
    public int pop() {
        if (isEmpty()) {
            throw new IllegalStateException("Стек пуст");
        }
        return stack[top--];
    }

    // Метод для добавления элемента в стек
    public void push(int value) {
        if (top == stack.length - 1) {
            throw new IllegalStateException("Стек переполнен");
        }
        stack[++top] = value;
    }

    // Метод для поиска элемента в стеке
    public int find(int value) {
        int operations = 0;
        Stack tempStack = new Stack(stack.length); // Временный стек для хранения элементов

        while (!isEmpty()) {
            int current = pop();
            tempStack.push(current);
            operations++;

            if (current == value) {
                // Перемещаем элементы обратно в оригинальный стек
                while (!tempStack.isEmpty()) {
                    push(tempStack.pop());
                }
                return operations; // Возвращаем количество операций
            }
        }

        // Если элемент не найден, возвращаем -1
        while (!tempStack.isEmpty()) {
            push(tempStack.pop()); // Возвращаем элементы обратно в оригинальный стек
        }
        return -1;
    }

    // Метод для демонстрации работы стека
    public static void main(String[] args) {

        String inputSize = "";
        int size = 0;
        boolean flag = true;
        Scanner scanner = new Scanner(System.in);

        while (flag) {
            try {

                System.out.print("Введите размер стека: ");
                inputSize = scanner.nextLine();
                size = Integer.parseInt(inputSize);
                flag = false;

            } catch (NumberFormatException e) {
                System.out.println("Ошибка: введите корректное целое число.");
            } catch (IllegalStateException e) {
                System.out.println("Ошибка: " + e.getMessage());
            }
        }

        Stack stack = new Stack(size);
        int accu = 1;

        flag = true;
        while (flag) {

            if (accu == size) flag = false;

            System.out.print("Введите целое число для добавления в стек: ");
            String inputValue = scanner.nextLine();

            try {

                int value = Integer.parseInt(inputValue); // преобразование ввода в целое число
                stack.push(value);
                System.out.println("> Число " + value + " добавлено в стек.");
                accu++;

            } catch (NumberFormatException e) {
                System.out.println("Ошибка: введите корректное целое число.");
                stack.top = -1;
            } catch (IllegalStateException e) {
                System.out.println("Ошибка: " + e.getMessage());
                stack.top = -1;
            }
        }

        // Проверка верхнего элемента
        System.out.println("Верхний элемент: " + stack.peek());

        // Извлечение элемента
        System.out.println("Извлеченный элемент: " + stack.pop());

        // Поиск элемента
        int operations = 0, vtf = 0;
        String valueToFind = "";
        System.out.println("\n_Поиск элемента_");

        //flag = true;
        while (true) {

            try {

                System.out.print("Введите значение элемента: ");
                valueToFind = scanner.nextLine();
                vtf = Integer.parseInt(valueToFind);
                operations = stack.find(vtf);
                break;

            } catch (NumberFormatException e) {
                System.out.println("Ошибка: введите корректное целое число.");
            } catch (IllegalStateException e) {
                System.out.println("Ошибка: " + e.getMessage());
            }

        }

        if (operations != -1) {
            System.out.println("Элемент " + vtf + " найден, количество операций pop: " + operations);
        } else {
            System.out.println("Элемент " + vtf + " не найден в стеке.");
        }

        // Проверка состояния стека
        System.out.println("\nСтек пуст? ");
        if (!stack.isEmpty()) System.out.print("> Нет");
        else System.out.print("> Да");

        scanner.close();
    }
}